package com.vertx.test.vertx.handler;


import com.vertx.test.vertx.bean.BaseResponse;
import com.vertx.test.vertx.VertxCore;
import io.vertx.ext.web.RoutingContext;
import lombok.extern.slf4j.Slf4j;

import javax.annotation.Resource;

@Slf4j
public abstract class VertxAbstractHandler implements VertxHandler {

  @Resource
  protected VertxCore vertxService;

  /**
   * @param ctx
   * @param type
   * @param <T>
   * @return
   */
  public <T> T requestBody(RoutingContext ctx, Class<T> type) {
    return ctx.getBodyAsJson().mapTo(type);
  }


  /**
   * @param ctx
   * @param data 待发送数据
   * @return
   */
  public void response(RoutingContext ctx, Object data) {
    response(ctx, BaseResponse.builder().data(data).build());
  }


  /**
   * @param ctx
   * @param code
   * @param data
   */
  public void response(RoutingContext ctx, int code, Object data) {
    response(ctx, BaseResponse.builder().code(code).data(data).build());
  }

  /**
   * @param ctx
   * @param code
   * @param message
   * @param data
   */
  public void response(RoutingContext ctx, int code, String message, Object data) {
    response(ctx, BaseResponse.builder().code(code).msg(message).data(data).build());
  }

  /**
   * @param ctx
   * @param code
   * @param errMessage
   */
  public void responseErr(RoutingContext ctx, int code, String errMessage) {
    response(ctx, BaseResponse.builder().code(code).msg(errMessage).build());
  }

  /**
   * @param ctx
   * @param response
   */
  private void response(RoutingContext ctx,
                        BaseResponse response) {
    ctx.json(response);
  }

}
